with Ada.Command_Line;    use Ada.Command_Line;
with Ada.Exceptions;      use Ada.Exceptions;
with Ada.Text_IO;         use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with TJa.Sockets;         use TJa.Sockets;
with Message;
use Message;
with Ada.Strings.Unbounded;
with Ada.Strings.Unbounded.Text_IO;
use Ada.Strings.Unbounded;

procedure Klient is

   --Socket_type används för att kunna kommunicera med en server
   Socket : Socket_Type;
   S_10 : String(1..10);
   I : Integer;


   function Login(Socket : in Socket_Type) return Boolean is
      User_Name, Password : String(1..20);
      Length : Integer;
      Resultat : String(1..15);
   begin
      Put("User ID: ");
      Get_Line(User_Name, Length);
      Put_Line(Socket,User_Name(1..Length));

      Put_Line(User_Name(1..Length));
      Put("Password: ");
      Get_Line(Password, Length);
      Put_Line(Socket,Password(1..Length));

      Put_Line(Password(1..Length));

      Get_Line(Socket,Resultat,Length);

      Ada.Text_IO.Put_Line("Server sent result: " & Resultat(1..Length));

   --   Ada.Text_IO.Put_Line("Resultat: " & Resultat,ResultatLength);
      if Resultat(1..Length) = "OK" then
         return True;
      end if;
      return False;

   end Login;

   Nickname : Unbounded_String;
   Header : Unbounded_String;


begin
   --Denna rutin kontrollerar att programmet startas med två parametrar.
   --Annars kastas ett fel.
   --Argumentet skall vara serverns adress och portnummer, t.ex.:
   --> klient localhost 3400
   if Argument_Count /= 2 then
      Raise_Exception(Constraint_Error'Identity,
                      "Usage: " & Command_Name & " remotehost remoteport");
   end if;


   -- Initierar en socket, detta krävs för att kunna ansluta denna till
   -- servern.
   Initiate(Socket);
   -- Ansluter till servern
   Connect(Socket, Argument(1), Positive'Value(Argument(2)));

   loop

      -- Send User Login & Password to the server and return true if correct username & password
      if Login(Socket) = true then
         Put_Line("Correct User and Password");

         Put_Line("Enter your nickname:");
         Nickname := Ada.Strings.Unbounded.Text_IO.Get_Line;

         Header := To_Unbounded_String("N");
         --Skicka Nickname request
         Send_Message(Socket,Header,Nickname);

       --  Get_Line(Socket, S_10, I);
    --     Put(S_10(1..I));
      else
         Put_Line("Wrong User or Password");
      end if;


   end loop;

   --Innan programmet avslutar stängs socketen, detta genererar ett exception
   --hos servern, pss kommer denna klient få ett exception när servern avslutas
   Close(Socket);






end Klient;
